package router

import (
	"data_service/handlers"
	"data_service/middleware"
	"data_service/server/websocket"
	"github.com/gin-gonic/gin"
)

// SetupRouter 配置应用路由
func SetupRouter(wsServer *websocket.WebSocketServer) *gin.Engine {
	r := gin.Default()

	// 全局中间件
	r.Use(middleware.CORS()) // CORS跨域

	// 公共路由 (无需认证)
	r.POST("/register", handlers.Register)
	r.POST("/login", handlers.Login)
	r.GET("/notices/latest", handlers.GetLatestNotice)
	r.GET("/ws", func(c *gin.Context) {
		userID := c.Query("user_id")
		roomID := c.Query("room_id")
		userName := c.Query("user_name")
		wsServer.ServeWS(c.Writer, c.Request, userID, roomID, userName)
	})

	// 日志路由
	logs := r.Group("/logs")
	{
		logs.POST("", handlers.CreateLog)                // 创建日志记录
		logs.GET("users/:user_id", handlers.GetUserLogs) // 获取用户日志
		logs.GET("system", handlers.GetSystemLogs)       // 获取系统日志
	}

	// 用户路由
	users := r.Group("/users")
	{
		users.GET("/:id", handlers.GetUserInfo)
		users.PUT("/:id", handlers.UpdateUserInfo)   // 需要认证
		users.POST("/avatar", handlers.UpdateAvatar) // 需要认证
	}

	// 动态路由
	posts := r.Group("/posts")
	{
		posts.GET("/recent", handlers.GetRecentPosts)
		posts.GET("", handlers.GetAllPosts) // 广场所有动态
		posts.GET("/user/:userId", handlers.GetPostsByUser)
		posts.POST("", handlers.CreatePost)        // 需要认证
		posts.POST("/:id/like", handlers.LikePost) // 需要认证
		posts.DELETE("/:id", handlers.DeletePost)  // 需要认证
	}

	// 房间路由
	rooms := r.Group("/rooms")
	{
		rooms.POST("", handlers.CreateRoomHandler)                         // 创建房间
		rooms.GET("", handlers.GetRoomsHandler)                            // 获取房间列表
		rooms.DELETE(":id", handlers.DeleteRoomHandler)                    // 删除房间
		rooms.POST(":id/empty-since", handlers.SetRoomEmptySinceHandler)   // 设置房间为空时间
		rooms.POST(":id/clear-empty", handlers.ClearRoomEmptySinceHandler) // 清空房间为空时间
	}

	// 聊天路由
	chat := r.Group("/chat")
	{
		chat.POST("/send", handlers.SendMessageHandler)        // 发送消息
		chat.GET("/messages", handlers.GetRoomMessagesHandler) // 获取房间消息历史
	}

	// 好友路由
	friends := r.Group("/friends")
	{
		friends.POST("/add", handlers.AddFriendHandler)       // 添加好友
		friends.GET("", handlers.GetFriendsHandler)           // 获取好友列表
		friends.POST("/delete", handlers.DeleteFriendHandler) // 删除好友
	}

	// 游戏路由
	games := r.Group("/games")
	{
		games.POST("", handlers.CreateGameRoomHandler)              // 创建游戏房间
		games.GET("", handlers.GetGameRoomsHandler)                 // 获取所有游戏房间
		games.POST("/status", handlers.UpdateGameRoomStatusHandler) // 更新游戏房间状态
	}

	// 兴趣圈路由
	circles := r.Group("/circles")
	{
		circles.POST("", handlers.CreateInterestCircle)        // 创建兴趣圈
		circles.GET("/:id", handlers.GetCircleByID)            // 获取兴趣圈详情
		circles.GET("/user/:user_id", handlers.GetUserCircles) // 获取用户加入的圈子
	}

	// 管理员后台路由
	admin := r.Group("/admin")
	admin.Use(middleware.AdminRequired()) // 应用管理员认证中间件
	{
		admin.GET("/dashboard", handlers.AdminDashboardData)
		admin.GET("/stats", handlers.GetSystemStats)
		// 用户管理
		admin.GET("/users", handlers.GetAllUsers)
		admin.PUT("/users/:id", handlers.UpdateUser)
		admin.DELETE("/users/:id", handlers.DeleteUser)
		// 动态管理
		admin.GET("/posts", handlers.GetAllPostsAdmin)
		admin.PUT("/posts/:id", handlers.UpdatePostAdmin)
		admin.DELETE("/posts/:id", handlers.DeletePostAdmin)
		// 公告管理
		admin.GET("/notices", handlers.GetAllNoticesAdmin)
		admin.POST("/notices", handlers.CreateNotice)
		admin.DELETE("/notices/:id", handlers.DeleteNoticeAdmin)
	}

	return r
}
